package cn.lizemin.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @author lzm
 * @version 1.0
 * @description: TODO
 * @date 2022/1/4 22:40
 */
@Controller
@RequestMapping("file")
public class FileController {

    private static final Logger log = LoggerFactory.getLogger(FileController.class);

    /**文件下载路径*/
    @Value("${file.download.dir}")
    private String path;
    /**
     * 文件下载
     * @param fileName
     */
    @RequestMapping("download")
    public void download(String fileName, HttpServletResponse response) throws IOException {
        log.debug("当前下载的文件名为：{}",fileName);
//        1.去指定目录中读取文件
        File file = new File(path, fileName);
//        2.将文件读取为输入流
        FileInputStream is = new FileInputStream(file);
//        2.1 在获取响应流之前一定要设置以附件形式下载，否则的话，页面只能查看文件，而不能直接下载
//        2.2 如果文件名有中文的话，一定要设置编码，否则下载的文件名有乱码
//        response.setHeader("content-disposition","attachment;filename=" + fileName);
        response.setHeader("content-disposition","attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
//        3.获取响应输出流
        ServletOutputStream os = response.getOutputStream();
//        4.输入流复制给输出流
//        int len = 0;
//        byte[] b = new byte[1024];
//        while (true) {
//            len = is.read(b);
//            if (len == -1) {
//                break;
//            }
//            os.write(b,0,len);
//
//        }
//        4.1 使用工具类
        FileCopyUtils.copy(is, os);

//        5.释放资源
//        is.close();


    }
}
